home *** CD-ROM | disk | FTP | other *** search
/ Mac Magazin/MacEasy 2 / Mac Magazin and MacEasy Magazine CD - Issue 02.iso / Themen Mac Magazin / Multimedia / Grafik-&QT Tools / NIH Image 1.53 (non-fpu) / Macros / Gel Plotting Macros < prev    next >
Text File  |  1993-12-20  |  6KB  |  219 lines

  1. var  {Global variables}
  2.   RoiLeft,RoiTop,RoiWidth,RoiHeight:integer;
  3.   GelPid,MarkedPid,nLanes,count,ppv:integer;
  4.   SaveRoiLeft,SaveRoiTop,hOffset,vOffset:integer;
  5.   MinY,MaxY,xscale,yscale:real;
  6.   VerticalLanes,Uncalibrated:boolean;
  7.  
  8. procedure MarkLane;
  9. var
  10.   left,top,width,height:integer;
  11.   GelNotCalibrated:boolean;
  12.   min,max:real;
  13. begin
  14.   GetRoi(left,top,width,height);
  15.   if width=0 then begin
  16.     PutMessage('Please outline the next lane.');
  17.     exit;
  18.   end;
  19.   if (VerticalLanes and (left=RoiLeft))
  20.       or  (not VerticalLanes and (top=RoiTop)) then begin
  21.      PutMessage('This lane has already been marked.');
  22.      exit;
  23.   end;
  24.   nLanes:=nLanes+1;
  25.   ChoosePic(GelPid);
  26.   if VerticalLanes then begin
  27.      MakeRoi(left+hOffset,RoiTop+vOffset,RoiWidth,RoiHeight);
  28.      RoiLeft:=left;
  29.      rUser1[nLanes]:=left;
  30.   end else begin
  31.      MakeRoi(RoiLeft+hOffset,top+vOffset,RoiWidth,RoiHeight);
  32.      RoiTop:=top;
  33.      rUser1[nLanes]:=top;
  34.   end;
  35.   GetPlotData(count,ppv,min,max);
  36.   if min<MinY then MinY:=min;
  37.   if max>MaxY then MaxY:=max;
  38.   SelectPic(MarkedPid);
  39.   if VerticalLanes
  40.      then MakeRoi(left,RoiTop,RoiWidth,RoiHeight)
  41.      else MakeRoi(RoiLeft,top,RoiWidth,RoiHeight);
  42.   DrawBoundary;
  43.   SetFontSize(9);
  44.   if VerticalLanes then begin
  45.     SetText('Centered, No Background');
  46.     MoveTo(RoiLeft+RoiWidth/2,RoiTop-6);
  47.   end else begin
  48.     SetText('Right Justified, No Background');
  49.     MoveTo(RoiLeft-2,RoiTop+RoiHeight/2);
  50.   end;
  51.   Write(nLanes:1);
  52.   RestoreRoi;
  53.   SelectPic(MarkedPid);
  54. end;
  55.  
  56.  
  57. macro 'Mark First Lane [1]';
  58. var
  59.   GelWidth,GelHeight,left,width:integer;
  60.   margin,leftm,rightm,topm,bottomm:integer;
  61. begin
  62.   RequiresVersion(1.53);
  63.   if WindowTitle='Temp' then begin
  64.     PutMessage('To restart, select the first lane in the gel.');
  65.     exit;
  66.   end;
  67.   GetRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
  68.   if RoiWidth=0 then begin
  69.     PutMessage('The Setup macro expects the Gel to be displayed and the first lane outlined.');
  70.     exit;
  71.   end;
  72.   VerticalLanes:=RoiHeight>RoiWidth;
  73.   Uncalibrated:=not Calibrated;
  74.   SaveState;
  75.   GelPid:=PidNumber;
  76.   SetForegroundColor(255);
  77.   SetBackgroundColor(0);
  78.   MinY:=999999;
  79.   MaxY:=-999999;
  80.   nLanes:=0;
  81.   margin:=20;
  82.   GetPicSize(GelWidth,GelHeight);
  83.   leftm:=RoiLeft;
  84.   if leftm>margin then leftm:=margin;
  85.   rightm:=GelWidth-(RoiWidth+RoiLeft);
  86.   if rightm>margin then rightm:=margin;
  87.   bottomm:=GelHeight-(RoiHeight+RoiTop);
  88.   if bottomm>margin then bottomm:=margin;
  89.   topm:=RoiTop;
  90.   if topm>margin then topm:=margin;
  91.   if VerticalLanes
  92.     then MakeRoi(RoiLeft-leftm,RoiTop-topm,
  93.            GelWidth-RoiLeft+leftm,RoiHeight+topm+bottomm)
  94.     else MakeRoi(RoiLeft-leftm,RoiTop-topm,
  95.            RoiWidth+leftm+rightm,GelHeight-RoiTop+topm);
  96.   Duplicate('Temp');
  97.   MarkedPid:=PidNumber;
  98.   SaveRoiLeft:=RoiLeft;
  99.   SaveRoiTop:=RoiTop;
  100.   hOffset:=RoiLeft-leftm;
  101.   vOffset:=RoiTop-topm;
  102.   RoiLeft:=leftm;
  103.   RoiTop:=topm;
  104.   SelectPic(GelPid);
  105.   KillRoi;
  106.   SelectPic(MarkedPid);
  107.   MakeRoi(RoiLeft,RoiTop,RoiWidth,RoiHeight);
  108.   if VerticalLanes
  109.     then RoiLeft:=-1
  110.     else RoiTop:=-1;
  111.   SetPlotScale(0,0);
  112.   MarkLane;
  113. end;
  114.  
  115. macro 'Mark Next Lane [2]';
  116. var
  117.   left,top,width,height:integer;
  118.   GelNotCalibrated:boolean;
  119.   min,max:real;
  120. begin
  121.   if nLanes=0 then begin
  122.     PutMessage('Please use the "Mark First Lane" macro first.');
  123.     Exit;
  124.   end;
  125.   MarkLane;
  126. end;
  127.  
  128. macro 'Plot Lanes [3]';
  129. var
  130.   left,top,width,height:integer;
  131.   GelNotCalibrated:boolean;
  132.   i,LaneLength:integer;
  133.   xmin,xmax,ymin,ymax,min,max:real;
  134.   MaxPlotWindowHeight,NeededSize:integer;
  135.   PlotTop,PlotBottom,PlotWidth,PlotHeight:integer;
  136.   hMargin,vMargin,SavePlotTop,PlotWindowSize:integer;
  137.   PlotWinHeight,PlotWinWidth,PlotsPid:integer;
  138. begin
  139.   if nLanes=0 then begin
  140.     PutMessage('Please use the Setup and Mark macros first.');
  141.     Exit;
  142.   end;
  143.   if VerticalLanes
  144.     then LaneLength:=RoiHeight
  145.     else LaneLength:=RoiWidth;
  146.   PlotWidth:=LaneLength;
  147.   if PlotWidth<500 then PlotWidth:=500;
  148.   if PlotWidth>(2*LaneLength) then PlotWidth:=2*LaneLength;
  149.   PlotHeight:=PlotWidth/2;
  150.   if PlotHeight<200 then PlotHeight:=200;
  151.   if PlotHeight>400 then PlotHeight:=400;
  152.   MaxPlotWindowHeight:=800;
  153.   hMargin:=5;
  154.   vMargin:=5;
  155.   PlotWinHeight:=nLanes*PlotHeight+2*vMargin;
  156.   if PlotWinHeight>MaxPlotWindowHeight then begin
  157.      PlotWinHeight:=MaxPlotWindowHeight;
  158.      PlotHeight:=(PlotWinHeight-2*vMargin)/nLanes;
  159.   end;
  160.   PlotWinWidth:=PlotWidth+2*hMargin;
  161.   PlotWindowSize:=PlotWinWidth*PlotWinHeight;
  162.   if PlotWindowSize>UndoBufferSize then begin
  163.     NeededSize:=(PlotWindowSize+0.05*PlotWindowSize) div 1024;
  164.     PutMessage('Use Preferences(Options Menu) to increase the Undo buffer size to at least ',NeededSize:1,'K.');
  165.     KillRoi;
  166.     exit;
  167.   end;
  168.   SetForegroundColor(255);
  169.   SetBackgroundColor(0);
  170.   SetNewSize(PlotWinWidth,PlotWinHeight);
  171.   MakeNewWindow('Plots');
  172.   PlotsPid:=PidNumber;
  173.   if UnCalibrated then begin
  174.     SetText('Left Justified');
  175.     SetFontSize(12);
  176.     MoveTo(6,vmargin+1);
  177.     Write('uncalibrated');
  178.   end;
  179.   xmin:=0;
  180.   xmax:=count-1;
  181.   ymin:=MinY;
  182.   ymax:=MaxY;
  183.   xscale:=PlotWidth/(xmax-xmin);
  184.   yscale:=PlotHeight/(ymax-ymin);
  185.   PlotTop:=vMargin;
  186.   SavePlotTop:=PlotTop;
  187.   RoiLeft:=SaveRoiLeft;
  188.   RoiTop:=SaveRoiTop;
  189.   SetLineWidth(1);
  190.   for i:=1 to nLanes do begin
  191.      PlotBottom:=PlotTop+(ymax-ymin)*yscale;
  192.      ChoosePic(GelPid);
  193.      if VerticalLanes
  194.         then MakeRoi(rUser1[i]+hOffset,RoiTop,RoiWidth,RoiHeight)
  195.         else MakeRoi(RoiLeft,rUser1[i]+vOffset,RoiWidth,RoiHeight);
  196.      GetPlotData(count,ppv,min,max);
  197.      SelectPic(PlotsPid);
  198.      MoveTo(hMargin,PlotBottom);
  199.      LineTo(PlotWinWidth-hMargin,PlotBottom);
  200.      MoveTo(hMargin,PlotBottom-(PlotData[0]-ymin)*yscale);
  201.      for i:=1 to count-1 do
  202.         LineTo(hMargin+i*xscale,PlotBottom-(PlotData[i]-ymin)*yscale);
  203.      PlotTop:=PlotTop+PlotHeight;
  204.   end;
  205.   nLanes:=0;
  206.   ResetCounter;
  207.   SetOptions('Area');
  208.   WandAutoMeasure(true);
  209.   AdjustAreas(true);
  210.   LabelParticles(false);
  211.   IncludeInteriorHoles(true);
  212.   SetFontSize(9);
  213.   SetText('Centered');
  214.   if Uncalibrated
  215.     then SetScale(0,'pixels')
  216.     else SetScale(sqrt(xscale*yscale/ppv),'mm');
  217.   RestoreState;
  218. end;
  219.